// import 'dart:io';
//
// import 'package:flutter/foundation.dart';
// import 'package:flutter/material.dart';
// import 'package:flutter/services.dart';
// import 'package:flutter_base/utils/log/utils_log.dart';
// import 'package:svgaplayer_flutter/svgaplayer_flutter.dart';
//
// import '../../utils/cache/custom_cache_manager.dart';
// import '../cache/cache_builder.dart';
//
// /// 简单的 SVGA 加载
// class CustomSVGAImage extends StatefulWidget {
//   final String? resUrl;
//   final String? assetsName;
//   final File? file;
//   final List<ImplantContent>? implantContents;
//   final bool repeat;
//   final bool clearAfterStop;
//
//   //动画播放完成一次
//   final Function? onSvgaCompleted;
//
//   const CustomSVGAImage({
//     super.key,
//     this.resUrl,
//     this.assetsName,
//     this.file,
//     this.implantContents,
//     this.repeat = true,
//     this.clearAfterStop = false,
//     this.onSvgaCompleted,
//   });
//
//   static Widget asset(
//     String name, {
//     double width = double.infinity,
//     double height = double.infinity,
//     BoxFit fit = BoxFit.contain,
//     bool repeat = true,
//     List<ImplantContent>? implantContents,
//     bool clearAfterStop = true,
//     Function? onSvgaCompleted,
//   }) {
//     return SizedBox(
//       width: width,
//       height: height,
//       child: FittedBox(
//         fit: fit,
//         child: CustomSVGAImage(
//           assetsName: name,
//           implantContents: implantContents,
//           repeat: repeat,
//           clearAfterStop: clearAfterStop,
//           onSvgaCompleted: onSvgaCompleted,
//         ),
//       ),
//     );
//   }
//
//   static Widget network(
//     String url, {
//     double width = double.infinity,
//     double height = double.infinity,
//     BoxFit fit = BoxFit.contain,
//     bool repeat = true,
//     List<ImplantContent>? implantContents,
//     Widget Function()? placeholder,
//     bool clearAfterStop = true,
//     Function? onSvgaCompleted,
//   }) {
//     return SizedBox(
//       width: width,
//       height: height,
//       child: FittedBox(
//         fit: fit,
//         child: CacheBuilder(
//           url: url,
//           placeholder: placeholder,
//           builder: (File file, Widget? child) {
//             return CustomSVGAImage(
//               file: file,
//               implantContents: implantContents,
//               repeat: repeat,
//               clearAfterStop: clearAfterStop,
//               onSvgaCompleted: onSvgaCompleted,
//             );
//           },
//         ),
//       ),
//     );
//   }
//
//   @override
//   State<StatefulWidget> createState() {
//     return _CustomSVGAImageState();
//   }
// }
//
// class _CustomSVGAImageState extends State<CustomSVGAImage>
//     with SingleTickerProviderStateMixin {
//   SVGAAnimationController? animationController;
//   bool isExecuted = false;
//
//   @override
//   void initState() {
//     super.initState();
//     animationController = SVGAAnimationController(vsync: this);
//     _tryDecodeSvga();
//   }
//
//   @override
//   void didUpdateWidget(covariant CustomSVGAImage oldWidget) {
//     super.didUpdateWidget(oldWidget);
//     if (oldWidget.resUrl != widget.resUrl ||
//         oldWidget.assetsName != widget.assetsName ||
//         oldWidget.file?.path != widget.file?.path ||
//         !widget.repeat) {
//       animationController?.reset();
//       _tryDecodeSvga();
//     }
//   }
//
//   @override
//   Widget build(BuildContext context) {
//     if (animationController == null) {
//       return Container();
//     }
//     return SVGAImage(
//       animationController!,
//       clearsAfterStop: widget.clearAfterStop,
//     );
//   }
//
//   @override
//   void dispose() {
//     animationController?.removeStatusListener(addStatusListener);
//     animationController?.dispose();
//     animationController = null;
//     super.dispose();
//   }
//
//   addStatusListener(AnimationStatus status) {
//     clog('addStatusListener  ${status.name}');
//     if (status == AnimationStatus.completed) {
//       if (!isExecuted) {
//         widget.onSvgaCompleted?.call();
//         isExecuted = true;
//       }
//     }
//   }
//
//   void _tryDecodeSvga() {
//     Future<MovieEntity> decode;
//     if (widget.assetsName != null) {
//       decode = SVGAParser.shared.decodeFromAssets(widget.assetsName!);
//     } else if (widget.file != null) {
//       decode =
//           SVGAParser.shared.decodeFromBuffer(widget.file!.readAsBytesSync());
//     } else if (widget.resUrl != null) {
//       decode = SVGAParser.shared.decodeFromURL(widget.resUrl!);
//     } else {
//       return;
//     }
//     decode.then((videoItem) async {
//       if (mounted && animationController != null) {
//         if (widget.implantContents?.isNotEmpty == true) {
//           for (var v in widget.implantContents!) {
//             await v.replaceContent(videoItem.dynamicItem);
//           }
//         }
//         if (animationController != null) {
//           animationController!.videoItem = videoItem;
//           if (widget.repeat) {
//             animationController!.repeat();
//           } else {
//             animationController!.forward();
//           }
//           animationController?.addStatusListener(addStatusListener);
//         }
//       } else {
//         videoItem.dispose();
//       }
//     }).catchError((e, stack) {
//       FlutterError.reportError(FlutterErrorDetails(
//         exception: e,
//         stack: stack,
//         library: 'svga library',
//         informationCollector: () => [
//           if (widget.resUrl != null) StringProperty('resUrl', widget.resUrl),
//           if (widget.assetsName != null)
//             StringProperty('assetsName', widget.assetsName),
//         ],
//       ));
//     });
//   }
// }
//
// abstract class ImplantContent {
//   abstract String key;
//
//   Future replaceContent(SVGADynamicEntity entity);
// }
//
// class ImplantContentText extends ImplantContent {
//   String text;
//   TextStyle? style;
//   @override
//   String key;
//
//   ImplantContentText({required this.text, this.style, required this.key});
//
//   @override
//   Future replaceContent(SVGADynamicEntity entity) async {
//     if (text.isNotEmpty) {
//       entity.setText(
//           TextPainter(text: TextSpan(text: text, style: style)), key);
//     }
//   }
// }
//
// class ImplantContentImage extends ImplantContent {
//   String imagePath;
//   @override
//   String key;
//
//   ImplantContentImage({required this.imagePath, required this.key});
//
//   @override
//   Future replaceContent(SVGADynamicEntity entity) async {
//     if (imagePath.isNotEmpty) {
//       var img = await decodeImageFromList(
//           (await rootBundle.load(imagePath)).buffer.asUint8List());
//       entity.setImage(img, key);
//     }
//   }
// }
//
// class ImplantContentUrl extends ImplantContent {
//   String url;
//   @override
//   String key;
//
//   ImplantContentUrl({required this.url, required this.key});
//
//   @override
//   Future replaceContent(SVGADynamicEntity entity) async {
//     if (url.isNotEmpty) {
//       File file = await CustomCacheManager().getSingleFile(url);
//       var img = await decodeImageFromList(file.readAsBytesSync());
//       entity.setImage(img, key);
//       /*double wh = 60.0;
//       double radius = wh * 0.5;
//       entity.setDynamicDrawer((canvas, frameIndex) {
//         var rect = Rect.fromCenter(center: Offset(radius, radius), width: wh, height: wh);
//         canvas.clipRRect(RRect.fromRectAndRadius(rect, Radius.circular(radius)), doAntiAlias: true);
//         canvas.drawImageRect(img, Rect.fromCenter(center: Offset(img.width / 2, img.height / 2), width: img.width * 1.0, height: img.height * 1.0), Rect.fromCircle(center: Offset(radius, radius), radius: radius), Paint());
//       }, key);*/
//     }
//   }
// }
